#include <iostream>
using namespace std;

class A {
    int a;

public:
    inline A()
	: a(0)
    {
    }
};

class d {
private:
    int a;
    int b;
    int c;

public:
    d(int na, int nb, int nc)
	: a(na)
	, b(nb)
	, c(nc)
    {
	cout << "error" << endl;
    }
};

class e {
    int a;

public:
    e(initializer_list<int> k)
    {
	for (auto p = k.begin(); p != k.end(); ++p) {
	    a = *p;
	}
	cout << "这是初始化列表的方式初始化" << endl;
    }
};

void init(initializer_list<int> a)
{
}

class f {
    int a;
    static int b;
    mutable int c;

public:
    f()
	: a(0)
    {
    }
    void set() const //可以看出，const修饰的就是对象（编译器级别）的指针 static不在具体对象内所以是没问题的。
    {
	    b=a;
	    c=a; // 用mutable来强制const对象的某些操作
    }
};

int f::b=1;

int main()
{
    /*
     * 初始化的问题，列表初始化丢失精度会报错
	double a=3.123;
	int b={a};
	*/
    /*
     * 就是用初始化列表调用构造函数，但是如果是不定参数呢?
	int k=3;
	d a{1,2,k};
	*/
    /*
     * 这就是使用列表初始化的方式直接传导了初始化列表
	e a{1,2,3,4,5};
	*/

    initializer_list<int> a = { 1, 2, 3 };
    init(a);
}
